package com.interface_;

/**
 * @Author 小闽
 * @Date 2024/9/14 16:46
 * @PackageName: com.interface_
 * @ClassName: InterfacePolyArr
 * @Description: 多态数组
 * @Version 1.0
 */
public class InterfacePolyArr {
    public static void main(String[] args) {
        //给Usb数组中，存放Phone和相机对象，Phone类还有一个特有的方法call(),
        //请遍历Usb数组，如果是Phone对象，除了调用Usb接口定义的方法外，
        //还需要调用Phone特有方法call。
        UsbInterface[] usbInterfaces = new UsbInterface[2];
        usbInterfaces[0] = new Phone_();
        usbInterfaces[1] = new Camera_();
        for (int i = 0; i < usbInterfaces.length; i++) {
            usbInterfaces[i].work();
            if (usbInterfaces[i] instanceof Phone_){
                // 多态的向下转型，即在运行时将usbInterface类型转换为Phone类型，并调用Phone_类中特有的call()方法
                ((Phone_) usbInterfaces[i]).call();
            }
        }
    }
}

interface UsbInterface{
    public void work();

}
// 定义Phone类去实现接口UsbInterface
class Phone_ implements UsbInterface{

    @Override
    public void work() {
        System.out.println("手机开始工作...");
    }
    // 特有方法call()
    public void call(){
        System.out.println("手机可以打电话...");
    }
}
// 定义Camera类去实现接口UsbInterface
class Camera_ implements UsbInterface{

    @Override
    public void work() {
        System.out.println("相机开始工作...");
    }
}